<?php
// +----------------------------------------------------------------------
// | OneThink [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2013 http://www.onethink.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
namespace Common\Api;

class UserApi {
	/**
	 * 检测用户是否登录
	 * 
	 * @return integer 0-未登录，大于0-当前登录用户ID
	 */
	public static function is_login() {
		$user = session ( 'user_auth' );
		if (empty ( $user )) {
			return 0;
		} else {
			return session ( 'user_auth_sign' ) == data_auth_sign ( $user ) ? $user ['uid'] : 0;
		}
	}
	
	/**
	 * 检测当前用户是否为管理员
	 * 
	 * @return boolean true-管理员，false-非管理员
	 */
	public static function is_administrator($uid = null) {
		$uid = is_null ( $uid ) ? is_login () : $uid;
		return $uid && (intval ( $uid ) === C ( 'USER_ADMINISTRATOR' ));
	}
	
	/**
	 * 根据用户ID获取用户名
	 * 
	 * @param integer $uid
	 *        	用户ID
	 * @return string 用户名
	 */
	public static function get_username($uid = 0) {
		static $list;
		if (! ($uid && is_numeric ( $uid ))) { // 获取当前登录用户名
			return session ( 'user_auth.username' );
		}
		
		/* 获取缓存数据 */
		if (empty ( $list )) {
			$list = S ( 'sys_active_user_list' );
		}
		
		/* 查找用户信息 */
		$key = "u{$uid}";
		if (isset ( $list [$key] )) { // 已缓存，直接使用
			$name = $list [$key];
		} else { // 调用接口获取用户信息
			$User = new User\Api\UserApi ();
			$info = $User->info ( $uid );
			if ($info && isset ( $info [1] )) {
				$name = $list [$key] = $info [1];
				/* 缓存用户 */
				$count = count ( $list );
				$max = C ( 'USER_MAX_CACHE' );
				while ( $count -- > $max ) {
					array_shift ( $list );
				}
				S ( 'sys_active_user_list', $list );
			} else {
				$name = '';
			}
		}
		return $name;
	}
	
	/**
	 * 根据用户ID获取用户昵称
	 * 
	 * @param integer $uid
	 *        	用户ID
	 * @return string 用户昵称
	 */
	public static function get_nickname($uid = 0) {
		static $list;
		if (! ($uid && is_numeric ( $uid ))) { // 获取当前登录用户名
			return session ( 'user_auth.username' );
		}
		
		/* 获取缓存数据 */
		if (empty ( $list )) {
			$list = S ( 'sys_user_nickname_list' );
		}
		
		/* 查找用户信息 */
		$key = "u{$uid}";
		if (isset ( $list [$key] )) { // 已缓存，直接使用
			$name = $list [$key];
		} else { // 调用接口获取用户信息
			$info = M ( 'Member' )->field ( 'nickname' )->find ( $uid );
			if ($info !== false && $info ['nickname']) {
				$nickname = $info ['nickname'];
				$name = $list [$key] = $nickname;
				/* 缓存用户 */
				$count = count ( $list );
				$max = C ( 'USER_MAX_CACHE' );
				while ( $count -- > $max ) {
					array_shift ( $list );
				}
				S ( 'sys_user_nickname_list', $list );
			} else {
				$name = '';
			}
		}
		return $name;
	}
}